Week03_보안 개념과 암호 기초
Week 03 · 보안 개념과 암호 기초
Day 1 · 보안의 기본 개념
1. 보안이란 결국 무엇을 지키는 것인가
보안은 "해커를 막는 기술"이 아니라 정보가 가져야 할 성질을 지키는 일이다. 그 성질을 정리한 것이 CIA 3요소다.
택배에 비유해 보자. 택배 상자 안을 남이 못 보게 하는 것(기밀성), 내용물이 바뀌지 않게 하는 것(무결성), 약속한 날 실제로 도착하게 하는 것(가용성). 셋 중 하나라도 깨지면 "안전한 배송"이 아니다.
시험에서는 어떤 사건이 어느 요소를 깨는지를 고르게 하는 문제가 가장 많다. 그러니 각 요소를 "사건"과 짝지어 기억하자.
2. CIA 3요소
| 요소 | 의미 | 깨뜨리는 공격 | 지키는 기술 |
|---|---|---|---|
| 기밀성 (Confidentiality) | 허가된 사람만 볼 수 있음 | 가로채기(스니핑, 도청) | 암호화, 접근통제 |
| 무결성 (Integrity) | 허가 없이 변경되지 않음 | 변조 | 해시, MAC, 전자서명 |
| 가용성 (Availability) | 필요할 때 사용 가능 | 차단(DoS/DDoS) | 이중화, 백업, 부하분산 |
실생활 예시로 감 잡기
| 사건 | 깨진 요소 | 이유 |
|---|---|---|
| 카페 와이파이에서 남의 로그인 정보를 훔쳐봄 | 기밀성 | 보면 안 될 사람이 봤다 |
| 송금 금액 10만 원을 100만 원으로 바꿈 | 무결성 | 내용이 허가 없이 바뀌었다 |
| 쇼핑몰이 DDoS로 하루 종일 접속 불가 | 가용성 | 필요할 때 쓸 수 없다 |
| 랜섬웨어가 파일을 암호화해 못 열게 함 | 가용성 (+무결성) | 내 파일을 쓸 수 없다 |
| 직원이 고객 명단을 USB로 가져감 | 기밀성 | 허가 범위 밖으로 유출 |
| 정전으로 서버가 꺼짐 | 가용성 | 공격이 아니어도 가용성 사고다 |
랜섬웨어는 데이터를 "훔쳐 가는" 공격이 아니라 못 쓰게 만드는 공격이라 기본적으로 가용성 침해로 분류한다. 요즘은 훔쳐 간 뒤 공개 협박(이중 갈취)도 하므로 기밀성까지 깨지기도 한다.
3. 추가 보안 요소 (CIA 다음 단골)
| 요소 | 한 줄 정의 | 비유 | 대표 기술 |
|---|---|---|---|
| 인증성 (Authenticity) | 상대·메시지가 진짜인가 | 신분증 확인 | 패스워드, 인증서, MAC |
| 책임추적성 (Accountability) | 누가 무엇을 했는지 추적 가능 | CCTV + 출입 기록부 | 감사 로그, 고유 계정 |
| 부인방지 (Non-repudiation) | 했던 일을 안 했다고 못 함 | 인감도장 찍은 계약서 | 전자서명, 타임스탬프 |
- 책임추적성이 성립하려면 계정을 여러 명이 공유하면 안 된다. 공용 계정
admin으로 사고가 나면 누가 했는지 알 수 없다. - 부인방지는 "보낸 사람만 만들 수 있는 증거"가 있어야 한다. 그래서 둘이 같은 키를 쓰는 MAC은 부인방지를 못 하고, 개인키는 나만 가진 전자서명이 부인방지를 한다. (Day 5~6에서 자세히)
- 부인방지는 방향에 따라 둘로 나눈다.
- 송신 부인방지: "나 안 보냈어"를 막음
- 수신 부인방지: "나 못 받았어"를 막음 (수신 확인 서명 등)
4. 위협의 4가지 유형
정보가 A에서 B로 흐른다고 할 때, 공격자가 끼어드는 방식은 4가지로 정리된다.
정상: A ───────────────▶ B
차단: A ─────── ✕ B (흐름이 끊김)
가로채기: A ───────┬───────▶ B
└──▶ 공격자 (몰래 엿봄)
변조: A ──▶ 공격자 ──(수정)──▶ B
위조: 공격자 ──(A인 척)──▶ B
| 유형 | 영어 | 깨지는 요소 | 예 |
|---|---|---|---|
| 차단 | Interruption | 가용성 | DoS, 케이블 절단 |
| 가로채기 | Interception | 기밀성 | 스니핑, 도청 |
| 변조(수정) | Modification | 무결성 | 중간자 공격으로 내용 수정 |
| 위조 | Fabrication | 인증(성) | A인 척 가짜 메시지 전송 |
소극적 공격 vs 적극적 공격
| 구분 | 소극적(수동적) 공격 | 적극적(능동적) 공격 |
|---|---|---|
| 하는 일 | 보기만 함 | 데이터를 바꾸거나 끼어듦 |
| 예 | 도청, 트래픽 분석 | 변조, 위조, 차단, 재전송(Replay) |
| 탐지 | 어렵다 (흔적이 거의 없음) | 상대적으로 탐지 가능 |
| 대책 중심 | 예방 (암호화) | 탐지 + 복구 |
내용을 못 읽어도 "누가, 언제, 얼마나 자주, 얼마나 크게" 통신하는지만으로 정보를 얻는 공격. 암호화해도 막기 어렵다. 소극적 공격이다.
5. 보안 원칙
| 원칙 | 의미 | 예 |
|---|---|---|
| 최소 권한 (Least Privilege) | 일에 필요한 최소한의 권한만 | 일반 업무는 관리자 계정 말고 일반 계정으로 |
| 직무 분리 (Separation of Duties) | 중요한 일을 한 사람이 처음부터 끝까지 못 하게 | 송금 요청자 ≠ 송금 승인자 |
| 알 필요성 (Need-to-know) | 권한이 있어도 업무상 필요한 정보만 | 같은 비밀등급이라도 담당 사건 자료만 열람 |
| 심층 방어 (Defense in Depth) | 여러 겹 방어. 한 겹 뚫려도 다음 겹 | 방화벽 + IPS + 백신 + 암호화 + 교육 |
| Fail-safe 기본값 | 명시적으로 허용 안 된 건 기본 거부 | 방화벽 마지막 규칙 "All Deny" |
| 완전한 중재 (Complete Mediation) | 모든 접근마다 권한 확인 | 처음 한 번만 확인하고 캐시 X |
| 개방 설계 (Open Design) | 설계 비밀에 의존하지 않음 | 케르크호프스 원칙과 같은 맥락 |
| 단순성 (Economy of Mechanism) | 단순할수록 검증이 쉽고 안전 | 복잡한 커스텀 암호 X |
| 권한 분리 (Separation of Privilege) | 여러 조건이 동시에 만족해야 허용 | 금고 열쇠 2개 (이중 통제) |
| 직무 순환 (Job Rotation) | 담당자를 주기적으로 교체 | 숨겨진 부정 발견, 공모 방지 |
| 강제 휴가 (Mandatory Vacation) | 휴가 중 대체자가 업무 점검 | 은행 직원 연속 휴가 |
- 최소 권한: 무엇을 할 수 있나 (권한, 행위)의 최소화
- 알 필요성: 무엇을 볼 수 있나 (정보 접근)의 최소화
둘 다 "필요한 만큼만"이지만, 시험에서 "정보 열람"을 강조하면 Need-to-know다.
- 정보보안에서 Fail-safe default: 실패·불명확하면 접근 거부 (안전한 쪽으로)
- 물리보안에서 Fail-safe 도어: 정전 시 문이 열림 (사람 생명 우선), Fail-secure 도어: 정전 시 잠김 (자산 보호 우선)
시험 문맥이 "접근통제/시스템"이면 거의 항상 기본 거부 의미다.
6. 접근의 4단계: 식별 → 인증 → 인가 → 책임추적
회사 출입을 생각해 보자.
- 식별(Identification): "저 홍길동입니다" — 이름이나 사번을 주장한다. (ID 입력)
- 인증(Authentication): 신분증·지문으로 그 주장이 사실인지 확인한다. (비밀번호 입력)
- 인가(Authorization): 확인된 홍길동이 어느 층에 들어갈 수 있는지 권한을 준다.
- 책임추적(Accountability): 출입 기록이 남아 나중에 누가 언제 어디에 갔는지 추적한다.
flowchart LR
A["식별
나는 누구다(ID)"] --> B["인증
증명(비밀번호)"]
B --> C["인가
권한 부여"]
C --> D["책임추적
로그 기록"]
- 인증 없이 인가 없다. 인증이 먼저, 인가가 나중.
- 식별은 "주장", 인증은 "검증". ID는 식별, 비밀번호는 인증.
- "AAA"는 Authentication, Authorization, Accounting(인증·인가·과금/기록). 네트워크 장비 접근통제(RADIUS, TACACS+)에서 쓰는 말.
7. 실습 · 사건 분류 연습
아래 사건이 깨뜨린 요소를 먼저 스스로 적고 답을 확인하자.
| # | 사건 | 답 |
|---|---|---|
| 1 | 공격자가 은행 서버인 척 가짜 사이트를 만들어 로그인 유도 | 인증(위조) |
| 2 | 내부자가 급여 테이블의 자기 연봉을 수정 | 무결성(변조) |
| 3 | 직원 5명이 admin 계정 하나를 같이 씀 |
책임추적성 |
| 4 | 이메일 계약 후 "그런 메일 보낸 적 없다"고 주장 | 부인방지 |
| 5 | 패킷을 캡처해 암호화된 통신량 패턴을 분석 | 기밀성(소극적 공격·트래픽 분석) |
| 6 | 로그인 패킷을 녹화해 나중에 그대로 다시 보냄 | 인증 (재전송 공격, 적극적) |
| 7 | 홍수로 전산실 침수 | 가용성 |
⚠️ 시험 함정
- "위조"는 무결성이 아니라 인증(성) 으로 짝짓는 게 표준 답이다. 변조 = 무결성, 위조 = 인증.
- 트래픽 분석은 소극적 공격이다. "암호화하면 막을 수 있다"는 보기는 틀린 경우가 많다.
- 재전송(Replay)은 내용을 바꾸지 않아도 적극적 공격이다. 대책은 타임스탬프, 순서번호(Nonce).
- 책임추적성의 전제는 "고유 식별" 이다. 공용 계정은 책임추적성을 깨뜨린다.
- "직무 분리"와 "최소 권한"을 섞는 보기: 한 사람이 요청·승인을 다 하는 문제 → 직무 분리.
기출 포인트
- 복원 기출에서는 짧은 사례(정전, 데이터 수정, 도청 등)를 주고 침해된 보안 요소를 고르게 하는 유형이 꾸준하다.
- 위협 4유형과 CIA의 연결 짝을 묻거나, 소극적/적극적 공격 중 성격이 다른 하나를 고르게 한다.
- 보안 원칙은 설명을 주고 원칙 이름을 고르게 하는 형태가 많다 (특히 직무 분리, 최소 권한, 심층 방어).
- 식별·인증·인가의 순서와 정의를 섞어 놓고 옳은 것을 고르게 한다.
확인 문제
Q1. 다음 중 소극적(수동적) 공격에 해당하는 것은?
① 재전송 공격 ② 트래픽 분석 ③ 메시지 변조 ④ 서비스 거부
정답: ②
- ① 틀림: 재전송은 캡처한 데이터를 다시 보내는 행위가 있으므로 적극적 공격이다.
- ② 맞음: 통신 패턴만 관찰하므로 소극적 공격이다. 흔적이 없어 탐지가 어렵다.
- ③ 틀림: 내용을 바꾸므로 적극적 공격(무결성 침해).
- ④ 틀림: 서비스를 방해하므로 적극적 공격(가용성 침해).
Q2. "송금 요청을 입력한 직원은 그 송금을 승인할 수 없다"는 규칙이 반영한 원칙은?
① 최소 권한 ② 알 필요성 ③ 직무 분리 ④ 심층 방어
정답: ③
- ① 틀림: 최소 권한은 개인이 가진 권한의 양을 줄이는 것. 이 규칙의 핵심은 업무를 나누는 것이다.
- ② 틀림: 알 필요성은 정보 열람 범위 제한이다.
- ③ 맞음: 중요한 업무를 두 사람 이상에게 나눠 단독 부정을 막는 것이 직무 분리다.
- ④ 틀림: 심층 방어는 여러 겹의 보안 장치를 두는 것이다.
Q3. 위협 유형과 침해되는 보안 요소의 연결로 옳지 않은 것은?
① 차단 - 가용성 ② 가로채기 - 기밀성 ③ 변조 - 무결성 ④ 위조 - 가용성
정답: ④
- ①②③ 옳음: 표준 짝이다.
- ④ 틀림: 위조(Fabrication)는 다른 사람인 척 메시지를 만드는 것이므로 인증(성) 을 침해한다.
Q4. 사용자가 ID를 입력하는 단계와, 시스템이 비밀번호로 이를 확인하는 단계를 순서대로 바르게 나타낸 것은?
① 인증 → 식별 ② 식별 → 인증 ③ 인가 → 인증 ④ 식별 → 인가
정답: ②
- ① 틀림: 확인(인증)할 대상이 먼저 주장(식별)되어야 한다.
- ② 맞음: ID 제시 = 식별, 비밀번호 확인 = 인증.
- ③ 틀림: 인가는 인증 이후 권한을 주는 단계다.
- ④ 틀림: 비밀번호 확인은 인가가 아니라 인증이다.
Q5. 여러 직원이 하나의 관리자 계정을 공유할 때 가장 직접적으로 약해지는 보안 요소는?
① 가용성 ② 책임추적성 ③ 기밀성 ④ 무결성
정답: ②
- ① 틀림: 계정 공유가 시스템 사용 가능성을 떨어뜨리지는 않는다.
- ② 맞음: 로그에
admin만 남아 누가 했는지 특정할 수 없다. - ③ 틀림: 간접적으로 유출 위험은 커지지만 "가장 직접적"인 것은 책임추적성이다.
- ④ 틀림: 계정 공유 자체가 데이터를 바꾸지는 않는다. 바뀌었을 때 "누가" 바꿨는지 모르는 것이 문제 → 책임추적성.
Day 2 · 인증 기초
1. 인증이란
인증은 "당신이 주장하는 그 사람이 맞는지" 확인하는 과정이다. 은행 창구 직원이 신분증 사진과 얼굴을 비교하는 것과 같다.
확인하는 근거는 크게 세 종류다. 아는 것, 가진 것, 그 사람 자체. 이걸 인증 3요소(유형)라고 한다. 여기에 행동 습관(행위)이나 위치를 더하기도 한다.
2. 인증 요소(유형)
| 유형 | 영어 | 예 | 약점 |
|---|---|---|---|
| 지식 기반 | Something you know | 비밀번호, PIN, 보안 질문 답 | 잊어버림, 추측·유출 |
| 소유 기반 | Something you have | OTP 토큰, 스마트카드, 휴대폰, 보안카드, 인증서 파일 | 분실·도난, 복제 |
| 존재(생체) 기반 | Something you are | 지문, 홍채, 망막, 얼굴, 정맥 | 비용, 오류율, 바꿀 수 없음 |
| 행위 기반 | Something you do | 서명 패턴, 음성*, 타자 리듬, 걸음걸이 | 상태에 따라 변동 |
| (위치 기반) | Somewhere you are | GPS, 접속 IP 대역 | 우회 가능, 보조 수단 |
* 음성은 성대 구조(신체)와 말하는 습관(행위)이 섞여 있어 교재에 따라 분류가 다르다. 생체 인증을 신체적 특성(지문·홍채·얼굴·정맥)과 행위적 특성(서명·타자·걸음걸이)으로 나누기도 한다.
비밀번호는 유출되면 바꾸면 되지만, 지문이 유출되면 평생 바꿀 수 없다. 그래서 생체정보는 원본 대신 특징점(템플릿) 만 저장하고, 가능하면 기기 안(보안 영역)에만 둔다.
3. 다중요소 인증(MFA) 판단법
핵심 규칙: 서로 다른 "유형"이 2개 이상이어야 2요소다. 개수가 아니라 종류를 센다.
비밀번호 + 지문 → 지식 + 존재 → ✅ 2요소
비밀번호 + 보안질문 → 지식 + 지식 → ❌ 1요소 (2단계일 뿐)
지문 + 홍채 → 존재 + 존재 → ❌ 1요소
연습 — 몇 요소인가? (답을 가리고 풀어 보기)
| # | 조합 | 답 |
|---|---|---|
| 1 | ATM 카드 + 비밀번호 4자리 | 2요소 (소유 + 지식) |
| 2 | 비밀번호 + PIN | 1요소 (지식 + 지식) |
| 3 | 스마트폰 OTP 앱 6자리 + 비밀번호 | 2요소 (소유 + 지식) |
| 4 | 지문 + 얼굴 인식 | 1요소 (존재 + 존재) |
| 5 | 사원증(스마트카드) + 정맥 인식 | 2요소 (소유 + 존재) |
| 6 | 비밀번호 + 이메일로 받은 인증 링크 | 2요소로 보는 게 일반적 (지식 + 메일함 접근=소유) |
| 7 | 인증서 파일 + 인증서 비밀번호 + 지문 | 3요소 (소유 + 지식 + 존재) |
"단계"는 절차를 몇 번 거치느냐, "요소"는 근거의 종류가 몇 개냐. 비밀번호 입력 후 보안질문을 또 묻는 건 2단계 1요소다.
4. 생체인증과 오류율 (FAR · FRR · CER)
생체인증은 비밀번호처럼 "일치/불일치"가 딱 떨어지지 않는다. 지문은 찍을 때마다 조금씩 다르므로, "얼마나 비슷하면 통과시킬지" 기준(임계값) 을 정해야 한다.
- 기준을 느슨하게 하면 → 본인은 잘 통과하지만 남도 통과(FAR↑)
- 기준을 엄격하게 하면 → 남은 막지만 본인도 자주 거부(FRR↑)
| 용어 | 뜻 | 다른 이름 | 결과 |
|---|---|---|---|
| FRR (False Rejection Rate) | 본인인데 거부 | 1종 오류, 오거부율 | 사용자 불편 |
| FAR (False Acceptance Rate) | 남인데 수락 | 2종 오류, 오수락률 | 보안 사고 (더 위험) |
| CER / EER | FAR = FRR 되는 지점 | 교차오류율 / 동일오류율 | 낮을수록 정확 |
오류율
^
|\ /
| \ FAR FRR /
| \ /
| \ /
| \ /
| \ /
| \ /
| \ /
| \ /
|.........\ /........
| \/ <- CER(EER)
| /\
| / \
| / \
+---------------------->
관대(느슨) 엄격
판정 기준(임계값)
- 그래프 읽는 법: 왼쪽(느슨)으로 갈수록 FAR이 크고, 오른쪽(엄격)으로 갈수록 FRR이 크다. 둘은 반비례(트레이드오프) 관계다.
- 두 시스템 비교: A의 CER 1%, B의 CER 3%라면 A가 더 정확한 시스템이다.
- 보안이 중요한 곳(군사시설, 금고)은 FRR을 감수하고 FAR을 낮추는 쪽(엄격)으로, 편의가 중요한 곳(휴대폰 잠금)은 FRR을 낮추는 쪽으로 기준을 둔다.
생체인증 기술이 갖춰야 할 특성
| 특성 | 뜻 |
|---|---|
| 보편성 | 누구나 가지고 있다 |
| 유일성(고유성) | 사람마다 다르다 |
| 영속성(지속성) | 시간이 지나도 잘 변하지 않는다 |
| 획득성(수집성) | 센서로 쉽게 측정된다 |
| 정확성 | 인식 성능이 높다 |
| 수용성 | 사용자가 거부감 없이 쓴다 (망막 스캔은 거부감↑) |
| 기만 방지 | 가짜(실리콘 지문, 사진)로 속이기 어렵다 |
5. OTP (One-Time Password)
OTP는 한 번 쓰면 버리는 비밀번호다. 훔쳐 가도 이미 쓴 값이라 재사용할 수 없어서 재전송 공격과 비밀번호 유출에 강하다.
원리는 간단하다. 사용자 단말과 서버가 같은 비밀값(seed) 을 나눠 갖고, 같은 재료(시간·횟수·질문)를 넣어 같은 계산을 한다. 결과가 같으면 통과.
sequenceDiagram
participant U as 사용자 OTP 앱
participant S as 서버
Note over U,S: 미리 같은 비밀값(seed) 공유
U->>U: OTP = f(seed, 현재시간)
U->>S: 6자리 OTP 입력
S->>S: f(seed, 현재시간) 직접 계산
S-->>U: 값이 같으면 인증 성공| 방식 | 재료 | 장점 | 단점 | 표준 예 |
|---|---|---|---|---|
| 시간 동기화 | 현재 시간 (예: 30초 단위) | 사용 간편 | 단말·서버 시간 오차, 유효시간 내 재사용 위험 | TOTP (RFC 6238) |
| 이벤트(카운터) 동기화 | 버튼 누른 횟수 | 시간 오차 무관 | 버튼만 눌러 카운터 불일치 | HOTP (RFC 4226) |
| 질의-응답 (비동기) | 서버가 준 난수(Challenge) | 동기화 불필요 | 사용자가 값을 입력해야 해서 번거로움 | Challenge-Response |
| 조합형 | 시간 + 이벤트 | 두 방식 보완 | 구현 복잡 |
해시를 여러 번 반복한 해시 체인으로 OTP 목록을 만들고, 역순으로 하나씩 쓰는 방식. 서버는 직전 값만 알면 "이번 값을 한 번 해시하면 직전 값이 되는지"로 검증한다. 해시의 일방향성 덕분에 지난 값으로 다음 값을 알 수 없다.
6. 패스워드 공격 기초
| 공격 | 방법 | 대응 |
|---|---|---|
| 무차별 대입 (Brute Force) | 가능한 모든 조합 시도 | 계정 잠금, 길이·복잡도 증가 |
| 사전 공격 (Dictionary) | 자주 쓰는 단어·비밀번호 목록 대입 | 사전 단어 금지, 복잡도 정책 |
| 레인보우 테이블 | 해시값↔평문 대응표를 미리 계산해 두고 조회 | 솔트(Salt) |
| 크리덴셜 스터핑 | 다른 사이트에서 유출된 ID/PW를 그대로 대입 | MFA, 사이트별 다른 비밀번호 |
| 패스워드 스프레이 | 흔한 비밀번호 1개를 여러 계정에 시도 (잠금 회피) | 이상 로그인 탐지, MFA |
| 사회공학 · 숄더서핑 · 키로거 | 속이기, 어깨너머 보기, 키 입력 가로채기 | 교육, 가림막, 백신 |
솔트(Salt)가 왜 레인보우 테이블을 막나?
솔트 없음: hash("1234") → 모든 사용자가 같은 값
→ 미리 만든 표에서 바로 찾음
솔트 있음: hash("x7Qp" + "1234") → 사용자마다 다른 값
hash("a91K" + "1234") → 또 다른 값
→ 솔트마다 표를 새로 만들어야 함 = 사실상 불가
- 솔트는 비밀이 아니다. 해시와 함께 DB에 저장해도 된다. 목적은 "미리 계산"을 무력화하는 것.
- 비밀번호 저장에는 일부러 느리게 만든 함수(키 스트레칭: PBKDF2, bcrypt, scrypt, Argon2)를 쓴다. 공격자의 대입 속도를 늦추기 위해서다.
⚠️ 시험 함정
- FAR이 보안상 더 위험, FRR은 편의성 문제. "1종 = FRR, 2종 = FAR"도 같이 외워 두자.
- CER은 높을수록 좋다가 아니라 낮을수록 좋다.
- 같은 유형 두 개(비밀번호+PIN, 지문+홍채)는 2요소가 아니다.
- OTP 앱이 휴대폰에 있으면 소유 기반이다. "OTP 번호를 안다 → 지식"으로 착각 금지.
- 솔트는 공개되어도 된다. "솔트는 비밀로 보관해야 한다"는 보기는 틀린 설명이다.
- 레인보우 테이블 대응은 솔트, 온라인 무차별 대입 대응은 계정 잠금. 대응책을 바꿔 끼운 보기에 주의.
기출 포인트
- 생체인증은 FAR/FRR/CER 정의, 그래프에서 교차점 의미, 두 오류 중 보안상 더 치명적인 것을 묻는 형태가 반복된다.
- 인증 유형 분류에서 특정 예시(스마트카드, OTP, 음성 등)가 어느 유형인지 묻거나, 보기 중 2요소가 아닌 조합을 고르게 한다.
- OTP는 동기화 방식별 특징·단점 비교, S/KEY의 해시 체인 원리가 출제된다.
- 패스워드 공격은 레인보우 테이블 ↔ 솔트 연결이 단골이다.
확인 문제
Q1. 다음 중 2요소 인증(2FA)에 해당하는 것은?
① 비밀번호 + 보안 질문 ② 지문 + 홍채 ③ 스마트카드 + PIN ④ PIN + 비밀번호
정답: ③
- ① 틀림: 둘 다 지식 기반. 2단계일 뿐 1요소다.
- ② 틀림: 둘 다 존재(생체) 기반.
- ③ 맞음: 소유(카드) + 지식(PIN), 서로 다른 유형 2개.
- ④ 틀림: 둘 다 지식 기반.
Q2. 생체인증에서 등록되지 않은 타인을 본인으로 잘못 수락하는 비율은?
① FRR ② FAR ③ CER ④ EER
정답: ②
- ① 틀림: FRR은 본인을 거부하는 비율(1종 오류).
- ② 맞음: False Acceptance = 잘못 수락. 2종 오류, 보안상 더 위험.
- ③④ 틀림: CER과 EER은 같은 개념으로, FAR과 FRR이 같아지는 지점이다.
Q3. 생체인증 시스템의 판정 기준을 더 엄격하게 조정했을 때 일반적인 변화로 옳은 것은?
① FAR 증가, FRR 감소 ② FAR 감소, FRR 증가 ③ FAR·FRR 모두 감소 ④ CER 자체가 낮아진다
정답: ②
- ① 틀림: 반대 방향이다. 기준이 느슨해질 때의 변화다.
- ② 맞음: 엄격하면 타인 통과(FAR)는 줄고 본인 거부(FRR)는 늘어난다.
- ③ 틀림: 둘은 트레이드오프 관계라 임계값만으로 동시에 줄일 수 없다.
- ④ 틀림: CER은 시스템 고유 성능이다. 임계값을 옮긴다고 CER이 바뀌지 않는다. 더 좋은 센서·알고리즘이 필요하다.
Q4. 레인보우 테이블 공격을 무력화하는 데 가장 효과적인 방법은?
① 비밀번호 해시값을 별도 서버에 저장 ② 사용자별 솔트를 추가해 해시 ③ 로그인 실패 시 계정 잠금 ④ 해시 대신 Base64 인코딩 사용
정답: ②
- ① 틀림: 저장 위치를 바꿔도 유출되면 같은 표로 조회된다.
- ② 맞음: 솔트가 다르면 같은 비밀번호도 해시가 달라져 미리 계산한 표가 쓸모없어진다.
- ③ 틀림: 계정 잠금은 온라인 대입을 막는다. 레인보우 테이블은 유출된 해시를 오프라인에서 조회하므로 무관하다.
- ④ 틀림: Base64는 암호화도 해시도 아닌 인코딩이라 누구나 되돌릴 수 있다.
Q5. OTP 생성 방식에 대한 설명으로 옳지 않은 것은?
① 시간 동기화 방식은 단말과 서버의 시각이 맞아야 한다
② 이벤트 동기화 방식은 생성 횟수(카운터)를 기준으로 한다
③ 질의-응답 방식은 서버가 보낸 난수를 이용해 응답값을 만든다
④ 질의-응답 방식은 단말과 서버의 카운터 동기화가 반드시 필요하다
정답: ④
- ①②③ 옳음: 각 방식의 기본 설명이다.
- ④ 틀림: 질의-응답은 매번 서버가 새 질문(난수)을 주므로 동기화가 필요 없는 비동기 방식이다. 대신 사용자가 질문을 입력해야 해서 번거롭다.
Day 3 · 암호 기본 용어
1. 암호의 기본 그림
암호는 자물쇠 달린 상자와 같다. 편지(평문)를 상자에 넣고 잠그면(암호화) 아무도 못 읽는 상자(암호문)가 된다. 열쇠(키)를 가진 사람만 열어서(복호화) 편지를 꺼낼 수 있다.
중요한 점: 자물쇠의 구조(알고리즘)는 누구나 알아도 된다. 열쇠(키)만 지키면 된다. 이게 오늘 배울 케르크호프스 원칙이다.
키(K) 키(K')
│ │
▼ ▼
평문 ──▶ [암호화 E] ──▶ 암호문 ──▶ [복호화 D] ──▶ 평문
(P) (C) (P)
C = E(K, P) P = D(K', C)
대칭키: K = K' 공개키: K ≠ K'
| 용어 | 영어 | 뜻 |
|---|---|---|
| 평문 | Plaintext | 원래 읽을 수 있는 메시지 |
| 암호문 | Ciphertext | 암호화되어 읽을 수 없는 메시지 |
| 암호화 | Encryption | 평문 → 암호문 |
| 복호화 | Decryption | 암호문 → 평문 (키를 가진 정당한 사람이) |
| 키 | Key | 암·복호화에 쓰는 비밀 값 |
| 키 공간 | Key space | 가능한 키의 전체 개수 (n비트 키 → 2ⁿ개) |
| 암호 해독 | Cryptanalysis | 키 없이 평문이나 키를 알아내려는 시도 |
| 암호 시스템 | Cryptosystem | 알고리즘 + 키 + 평문·암호문 공간 전체 |
복호화는 키를 가진 사람이 정상적으로 푸는 것, 해독(크래킹) 은 키 없이 깨는 것. 시험 보기에서 섞여 나온다.
2. 고전 암호 — 치환과 전치
현대 암호도 결국 이 두 기술을 조합한다. 직접 손으로 해 보면 개념이 확실해진다.
| 구분 | 치환 (Substitution) | 전치 (Transposition) |
|---|---|---|
| 하는 일 | 글자를 다른 글자로 바꿈 | 글자는 그대로, 위치(순서)를 섞음 |
| 비유 | 암호표 보고 글자 바꿔 쓰기 | 카드 섞기 |
| 예 | 카이사르, 비즈네르, 플레이페어 | 스키테일, 레일펜스, 열 전치 |
| 글자 빈도 | 단일 치환은 빈도가 그대로 남음 | 글자 빈도가 완전히 그대로 남음 |
실습 ① 카이사르 암호 (시프트 3)
알파벳을 정해진 칸(키)만큼 밀어 쓰는 단일 문자 치환이다.
평문 알파벳: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
암호 알파벳: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
HELLO를 키 3으로 암호화:
| 평문 | H | E | L | L | O |
|---|---|---|---|---|---|
| +3 | K | H | O | O | R |
→ 암호문 KHOOR. 복호화는 반대로 3칸 당기면 된다.
- 약점 1: 키가 25가지뿐 → 전수 조사로 즉시 해독.
- 약점 2: 같은 글자는 항상 같은 글자로 바뀐다(L→O, L→O). 영어에서 E가 가장 많다는 빈도 분석으로 깨진다.
실습 ② 비즈네르 암호 (키 KEY)
글자마다 밀어 주는 칸 수가 키워드에 따라 바뀌는 다중 문자 치환이다. A=0, B=1, …, Z=25로 놓고 더한 뒤 26으로 나눈 나머지를 쓴다.
| 평문 | H(7) | E(4) | L(11) | L(11) | O(14) |
|---|---|---|---|---|---|
| 키 반복 | K(10) | E(4) | Y(24) | K(10) | E(4) |
| 합 mod 26 | 17 | 8 | 35→9 | 21 | 18 |
| 암호문 | R | I | J | V | S |
→ HELLO → RIJVS
- 같은 L이 한 번은 J, 한 번은 V가 되었다. 빈도 분석을 어렵게 만든 게 핵심 발전이다.
- 하지만 키가 주기적으로 반복되므로, 키 길이를 알아내면(카시스키 시험 등) 결국 깨진다.
실습 ③ 전치 암호 (레일펜스, 2줄)
SECURITY를 지그재그로 두 줄에 나눠 쓴 뒤, 윗줄 → 아랫줄 순서로 읽는다.
위: S . C . R . T .
아래: . E . U . I . Y
→ 윗줄 SCRT + 아랫줄 EUIY = SCRTEUIY
- 글자 자체는 하나도 안 바뀌었다(전치). 스키테일(막대에 띠를 감아 쓰기)도 같은 원리다.
평문과 같은 길이의 완전 무작위 키를 딱 한 번만 쓰고 XOR하면, 이론적으로 절대 해독 불가능(완전 비밀성) 하다(섀넌 증명). 대신 키를 평문만큼 만들어 미리 안전하게 전달해야 해서 현실적으로 쓰기 어렵다.
⚠️ 인증의 OTP(One-Time Password)와 이름이 비슷하니 문맥으로 구분하자.
3. 섀넌의 현대 암호 설계 원리 — 혼돈과 확산
| 원리 | 의미 | 쉽게 말하면 | 구현 수단 |
|---|---|---|---|
| 혼돈 (Confusion) | 키와 암호문의 관계를 복잡하게 | 암호문을 봐도 키를 짐작 못 하게 | 치환 (S-Box) |
| 확산 (Diffusion) | 평문 1비트 변화가 암호문 여러 비트에 퍼짐 | 평문의 통계적 특징을 흩어 버림 | 전치·순열 (P-Box), 섞기 |
- 비유: 혼돈은 "재료 맛을 알아볼 수 없게 양념하기", 확산은 "한 숟가락 넣은 소금이 국 전체에 퍼지게 젓기".
- 현대 블록 암호(DES, AES)는 치환 + 전치를 라운드마다 반복해서 혼돈과 확산을 모두 얻는다. 이런 구조를 곱 암호(Product Cipher) 라고 한다.
- 쇄도 효과(Avalanche Effect): 평문이나 키 1비트만 바뀌어도 암호문의 약 절반 비트가 바뀌는 성질. 확산이 잘 된 결과다.
4. 케르크호프스 원칙 (Kerckhoffs's Principle)
암호 시스템은 키를 제외한 모든 것이 공개되어도 안전해야 한다.
- 왜? 알고리즘은 결국 언젠가 유출된다(리버스 엔지니어링, 내부자). 알고리즘 비밀에 기대면 유출되는 순간 끝이다.
- 키만 바꾸면 다시 안전해지는 구조가 운영상 훨씬 유리하다.
- 그래서 AES, RSA처럼 공개 검증된 표준 알고리즘을 쓰고, 직접 만든 비공개 알고리즘(Security through obscurity)은 피한다.
5. 암호 공격의 4가지 유형
공격자가 무엇을 손에 쥐고 있느냐로 나눈다. 아래로 갈수록 공격자에게 정보가 많다(=공격자에게 유리).
| 순 | 공격 | 공격자가 가진 것 | 비유 |
|---|---|---|---|
| 1 | 암호문 단독 (COA) | 암호문만 | 도청한 암호 편지 뭉치만 있음 |
| 2 | 기지 평문 (KPA) | 평문-암호문 쌍 몇 개 (고를 수는 없음) | 우연히 원문과 암호문을 같이 입수 |
| 3 | 선택 평문 (CPA) | 원하는 평문을 넣어 암호문을 얻을 수 있음 | 암호 기계를 잠깐 빌려 써 봄 |
| 4 | 선택 암호문 (CCA) | 원하는 암호문을 넣어 평문을 얻을 수 있음 | 복호 기계를 잠깐 빌려 써 봄 |
공격자 정보량 적음 ───────────────────────▶ 많음
COA → KPA → CPA → CCA
방어 입장 난이도 쉬움 ─────────────────────▶ 어려움
(CCA에도 안전한 암호가 가장 강한 암호)
- 전수 조사(Brute Force): 키를 하나씩 다 대입. 키 길이가 1비트 늘면 시간이 2배. 56비트 DES는 오늘날 전수 조사로 깨진다.
- 차분 분석: 차이가 있는 평문 쌍을 골라 넣고 암호문 차이를 관찰 → 선택 평문 공격 계열.
- 선형 분석: 많은 평문-암호문 쌍으로 선형 근사식을 찾음 → 기지 평문 공격 계열.
- 부채널 공격: 알고리즘이 아니라 전력 소모, 처리 시간, 전자파 같은 물리적 누출을 이용.
6. 실습 · 공격 유형 맞히기
| 상황 | 공격 유형 |
|---|---|
| 도청한 암호문만으로 빈도 분석을 함 | 암호문 단독 |
| 회사가 매일 "Good morning"으로 시작하는 암호 메일을 보낸다는 걸 알고 분석 | 기지 평문 |
| 공격자가 피해자 서버에 원하는 문자열을 넣어 암호화 결과를 받아 봄 | 선택 평문 |
| 공격자가 조작한 암호문을 서버에 보내 복호 결과(또는 오류 반응)를 관찰 | 선택 암호문 |
⚠️ 시험 함정
- 혼돈 ↔ 치환, 확산 ↔ 전치. 반대로 짝지은 보기가 단골이다.
- 혼돈은 키-암호문, 확산은 평문-암호문 관계. "혼돈은 평문 통계를 숨긴다"는 확산 설명을 섞은 오답이다.
- 케르크호프스: 비밀은 키뿐. "알고리즘도 비밀이어야 안전" → 틀림.
- 공격 유형 순서(정보량): COA < KPA < CPA < CCA. "기지 평문 = 평문을 골라서 넣을 수 있다"로 설명하면 틀림(그건 선택 평문).
- 카이사르·비즈네르는 치환, 스키테일·레일펜스는 전치. 비즈네르는 다중 문자 치환.
- 일회용 패드는 키를 재사용하면 완전 비밀성이 깨진다.
기출 포인트
- 혼돈/확산의 정의와 구현 수단 짝을 묻는 문제가 자주 나온다.
- 공격자가 가진 정보를 서술하고 공격 유형 이름을 고르게 하거나, 정보량 순서를 묻는다.
- 케르크호프스 원칙의 핵심 문장(키만 비밀)을 고르는 형태.
- 고전 암호는 치환/전치 분류, 카이사르처럼 간단한 계산을 직접 해 보게 하는 경우도 있다.
확인 문제
Q1. 키 3인 카이사르 암호로 CAT를 암호화한 결과는?
① FDW ② ZXQ ③ DBU ④ FDX
정답: ①
- C→F, A→D, T→W 이므로 FDW.
- ② 틀림: 3칸 뒤로 민 결과(복호화 방향)다.
- ③ 틀림: 1칸만 밀었다.
- ④ 틀림: T를 4칸(→X) 밀었다.
Q2. 평문의 한 비트 변화가 암호문의 여러 비트에 영향을 주도록 하여 평문의 통계적 성질을 감추는 원리는?
① 혼돈 ② 확산 ③ 치환 ④ 케르크호프스 원칙
정답: ②
- ① 틀림: 혼돈은 키와 암호문의 관계를 복잡하게 하는 원리다.
- ② 맞음: 평문 변화가 퍼지는 것 = 확산.
- ③ 틀림: 치환은 혼돈을 얻는 수단이다.
- ④ 틀림: 키만 비밀로 하라는 설계 원칙이지 비트 확산과 무관하다.
Q3. 공격자가 임의로 고른 평문을 암호화 장치에 넣어 대응하는 암호문을 얻을 수 있는 상황의 공격은?
① 암호문 단독 공격 ② 기지 평문 공격 ③ 선택 평문 공격 ④ 선택 암호문 공격
정답: ③
- ① 틀림: 암호문만 가진 경우다.
- ② 틀림: 평문-암호문 쌍을 알고는 있지만 고를 수는 없다.
- ③ 맞음: "평문을 선택해서 암호화" = 선택 평문.
- ④ 틀림: 암호문을 골라 복호화해 보는 공격이다.
Q4. 케르크호프스 원칙에 대한 설명으로 옳은 것은?
① 암호 알고리즘을 비공개로 해야 안전하다
② 키를 제외한 시스템의 모든 것이 공개되어도 안전해야 한다
③ 키 길이는 평문 길이와 같아야 한다
④ 암호문은 평문보다 길어야 한다
정답: ②
- ① 틀림: 정반대. 알고리즘 비밀에 의존하는 것을 경계하는 원칙이다.
- ② 맞음.
- ③ 틀림: 일회용 패드의 조건이다.
- ④ 틀림: 근거 없는 설명이다.
Q5. 다음 중 전치(Transposition) 암호에 해당하는 것은?
① 카이사르 암호 ② 비즈네르 암호 ③ 스키테일 암호 ④ 플레이페어 암호
정답: ③
- ①②④ 틀림: 모두 글자를 다른 글자로 바꾸는 치환 암호다(카이사르=단일, 비즈네르=다중, 플레이페어=두 글자 단위).
- ③ 맞음: 막대에 띠를 감아 글자 순서만 바꾸는 전치 암호다.
Day 4 · 대칭키 vs 공개키 (큰 그림)
1. 먼저 XOR — 현대 암호의 기본 연산
XOR(⊕, 배타적 논리합)은 두 비트가 다르면 1, 같으면 0이다.
| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
암호에서 XOR이 사랑받는 이유는 같은 값을 두 번 XOR하면 원래대로 돌아오기 때문이다.
(P ⊕ K) ⊕ K = P
실습 — 글자 'H'를 키로 암호화·복호화
'H' (0x48) = 0 1 0 0 1 0 0 0 ← 평문
키 = 1 0 1 0 1 0 1 0
───────────────── XOR
암호문 = 1 1 1 0 0 0 1 0
암호문 = 1 1 1 0 0 0 1 0
키 = 1 0 1 0 1 0 1 0
───────────────── XOR
복호 결과 = 0 1 0 0 1 0 0 0 ← 다시 'H'
- 같은 연산 하나로 암호화·복호화가 다 된다 → 구현이 빠르고 간단하다.
- 키 비트가 무작위면 암호문도 무작위처럼 보인다. 일회용 패드와 스트림 암호가 이 원리다.
- ⚠️ 같은 키를 두 번 쓰면: C1 ⊕ C2 = P1 ⊕ P2 → 키가 사라져 평문끼리의 관계가 드러난다. 스트림 암호에서 키스트림 재사용 금지의 이유.
2. 블록 암호 vs 스트림 암호
대칭키 암호는 데이터를 처리하는 단위에 따라 둘로 나뉜다.
블록 암호: 일정 크기로 잘라 덩어리째 암호화
[블록1 128bit][블록2 128bit][블록3 + 패딩]
│ │ │
[AES] [AES] [AES]
스트림 암호: 키스트림을 만들어 1비트(1바이트)씩 XOR
평문: 1 0 1 1 0 0 1 ...
키스트림: 0 1 1 0 1 0 1 ... (난수 발생기가 계속 생성)
암호문: 1 1 0 1 1 0 0 ...
| 구분 | 블록 암호 | 스트림 암호 |
|---|---|---|
| 단위 | 고정 크기 블록 (64·128비트) | 비트/바이트 단위 |
| 원리 | 치환·전치를 여러 라운드 반복 | 키스트림과 XOR |
| 속도 | 상대적으로 느림 | 빠름, 하드웨어 구현 간단 |
| 오류 전파 | 모드에 따라 블록 단위로 퍼질 수 있음 | 비트 오류가 해당 비트에만 영향 |
| 주 용도 | 파일·DB·통신 범용 | 무선 통신, 실시간 음성·영상 |
| 예 | DES, 3DES, AES, SEED, ARIA, LEA | RC4, ChaCha20, LFSR 기반 |
- 블록 암호를 긴 데이터에 쓰는 방식이 운영 모드(ECB, CBC, CTR 등)다. 자세한 건 Week05_정보보안 일반.
- SEED, ARIA, LEA는 국내 개발 블록 암호. 셋 다 블록 크기 128비트다.
3. 대칭키 암호 — 같은 열쇠 두 개
대칭키는 집 열쇠를 복사해서 나눠 갖는 것과 같다. 잠글 때와 열 때 같은 열쇠를 쓴다.
- 장점: 계산이 단순해 매우 빠르다. 대용량 데이터에 적합.
- 문제 1 — 키 분배: 상대에게 열쇠를 안전하게 어떻게 건네나? 열쇠를 보내는 길이 안전하다면 애초에 암호가 필요 없다.
- 문제 2 — 키 개수 폭발: 사람마다 짝을 지어 서로 다른 키가 필요하다.
4. 공개키 암호 — 우체통 비유
공개키는 우체통과 같다. 투입구(공개키)는 누구에게나 열려 있어 아무나 편지를 넣을(암호화) 수 있지만, 꺼내는 열쇠(개인키)는 주인만 가지고 있다.
- 각자 공개키 + 개인키 한 쌍을 만든다. 공개키는 세상에 공개, 개인키는 절대 비밀.
- 한쪽 키로 잠근 것은 다른 쪽 키로만 열린다.
- 공개키에서 개인키를 계산해 내기는 사실상 불가능하다(수학적 난제 기반).
| 알고리즘 | 기반 난제 | 주 용도 |
|---|---|---|
| RSA | 큰 수의 소인수분해 | 암호화, 전자서명 |
| Diffie-Hellman | 이산대수 | 키 교환(합의) 전용 |
| ElGamal | 이산대수 | 암호화, 서명 |
| DSA | 이산대수 | 전자서명 전용 |
| ECC (타원곡선) | 타원곡선 이산대수 | 짧은 키로 RSA와 같은 강도 → 모바일·IoT |
5. 대칭키 vs 공개키 비교
| 구분 | 대칭키 | 공개키(비대칭) |
|---|---|---|
| 키 | 암·복호화 같은 키 | 공개키 + 개인키 쌍 |
| 속도 | 빠름 | 느림 (수백~수천 배) |
| 키 개수 (n명) | n(n-1)/2 | 2n |
| 문제점 | 키 분배, 키 관리 | 느림, 공개키가 진짜 그 사람 것인지 확인 필요(→ PKI) |
| 부인방지 | 불가 (둘 다 같은 키) | 가능 (개인키는 본인만) |
| 예 | DES, AES, SEED, ARIA, LEA | RSA, ECC, ElGamal, DSA, DH |
| 용도 | 대량 데이터 암호화 | 키 교환·분배, 전자서명 |
6. 실습 · 키 개수 계산
대칭키: n명 중 2명씩 짝마다 키 1개 → 조합 nC2 = n(n-1)/2
공개키: 사람마다 2개(공개키 + 개인키) → 2n (공개키만 세면 n개)
| 인원 n | 대칭키 n(n-1)/2 | 공개키 2n |
|---|---|---|
| 5명 | 5×4/2 = 10 | 10 |
| 10명 | 10×9/2 = 45 | 20 |
| 100명 | 100×99/2 = 4,950 | 200 |
| 1,000명 | 1000×999/2 = 499,500 | 2,000 |
문제에서 "필요한 키의 총 개수"인지 "공개키 개수"인지 꼭 확인. 공개키 방식에서 공개키만 묻으면 n개다. 또 "새로 1명이 들어올 때 추가되는 대칭키 수"는 기존 인원 수 n개다.
7. 하이브리드 암호 — 둘의 장점만
현실에서는 공개키로 대칭키를 안전하게 전달하고, 실제 데이터는 빠른 대칭키로 암호화한다. 공개키로 "열쇠를 담은 작은 금고"만 보내는 셈이다.
sequenceDiagram
participant C as 클라이언트(브라우저)
participant S as 서버
S->>C: 1. 서버 인증서(서버 공개키 포함)
C->>C: 2. 인증서 검증, 랜덤 세션키 생성
C->>S: 3. 세션키를 서버 공개키로 암호화해 전송
S->>S: 4. 서버 개인키로 복호화 → 세션키 획득
Note over C,S: 이제 양쪽이 같은 세션키 보유
C->>S: 5. 데이터는 세션키(AES 등)로 암호화
S->>C: 5. 응답도 세션키로 암호화- 위 그림은 초기 SSL/TLS의 RSA 키 전송 방식을 단순화한 것이다. 원리를 이해하기 가장 좋다.
- 최신 TLS 1.3은 RSA 키 전송을 없애고 (EC)DHE 키 교환으로 세션키를 합의한다. 그래도 "공개키 기술로 세션키를 정하고 → 데이터는 대칭키"라는 하이브리드 구조는 같다.
- 이메일 암호화 PGP도 같은 하이브리드 구조다.
8. 공개키 사용 방향 (★ 가장 헷갈리는 부분)
같은 키 쌍이라도 목적에 따라 누구의 어떤 키를 쓰는지가 정반대다.
[기밀성] "B만 읽게 하고 싶다"
A ──(B의 공개키로 암호화)──▶ 암호문 ──(B의 개인키로 복호화)──▶ B
우체통에 넣기(누구나) 열쇠로 꺼내기(B만)
[전자서명] "A가 보낸 게 맞다고 증명하고 싶다"
A ──(A의 개인키로 서명)──▶ 서명 ──(A의 공개키로 검증)──▶ 누구나
인감도장 찍기(A만) 인감증명과 대조(누구나)
| 목적 | 잠그는(만드는) 키 | 여는(확인하는) 키 | 얻는 것 |
|---|---|---|---|
| 기밀성 | 수신자 공개키 | 수신자 개인키 | 수신자만 읽음 |
| 전자서명 | 송신자 개인키 | 송신자 공개키 | 인증, 무결성, 부인방지 |
"비밀은 받는 사람 것, 서명은 보내는 사람 것." 개인키는 항상 그 키의 주인이 하는 행동(내 편지 열기, 내 도장 찍기)에 쓰인다.
⚠️ 시험 함정
- 키 개수: 대칭 n(n-1)/2, 공개키 2n. 공식을 반대로 쓴 보기 주의.
- 기밀성은 수신자 공개키로 암호화. "송신자 개인키로 암호화하면 기밀성"은 틀림 — 그건 공개키를 가진 누구나 풀 수 있으니 기밀성이 없다(대신 서명 효과).
- 공개키 암호는 대칭키보다 느리다. 그래서 대용량 데이터에 직접 쓰지 않는다.
- Diffie-Hellman은 키 교환 알고리즘이지 데이터 암호화나 서명용이 아니다. 또 DH 자체는 상대 인증이 없어 중간자 공격에 취약하다.
- 대칭키의 대표 문제는 키 분배, 공개키의 대표 문제는 공개키의 진위(→ 인증서·PKI).
- RSA = 소인수분해, ElGamal·DSA·DH = 이산대수. 기반 문제를 바꿔 끼운 보기 주의.
기출 포인트
- n명일 때 키 개수 계산은 거의 매 시즌 등장하는 계산형 문제다.
- 대칭/공개키 특징 비교표에서 틀린 설명 하나 고르기 (속도, 키 분배, 부인방지 등).
- 기밀성과 서명에서 어떤 키를 쓰는지 묻는 문제가 반복된다.
- 알고리즘 이름을 주고 대칭/비대칭 분류, 또는 기반 수학 문제를 짝짓게 한다.
- 하이브리드 방식이 왜 필요한지(속도 + 키 분배 해결) 설명형 보기로 나온다.
확인 문제
Q1. 20명이 서로 1:1 비밀 통신을 하려 할 때, 대칭키 방식과 공개키 방식에서 필요한 키의 총 개수로 옳은 것은?
① 190개, 40개 ② 380개, 20개 ③ 190개, 20개 ④ 400개, 40개
정답: ①
- 대칭키: 20×19/2 = 190. 공개키: 20×2 = 40.
- ② 틀림: 380은 2로 나누지 않은 값, 20은 공개키만 센 값이다.
- ③ 틀림: 공개키 방식의 "총" 키 개수는 개인키까지 포함해 40개다.
- ④ 틀림: 400은 n²으로 계산한 오답이다.
Q2. A가 B에게 B만 읽을 수 있는 메시지를 보내려 할 때 A가 사용해야 하는 키는?
① A의 개인키 ② A의 공개키 ③ B의 공개키 ④ B의 개인키
정답: ③
- ① 틀림: A의 개인키로 잠그면 A의 공개키(공개된 것)로 누구나 연다 → 서명이지 기밀성이 아니다.
- ② 틀림: A의 공개키로 잠그면 A만 열 수 있어 B가 읽지 못한다.
- ③ 맞음: B의 공개키로 잠그면 B의 개인키로만 열린다.
- ④ 틀림: B의 개인키는 B만 갖고 있어 A가 쓸 수 없다.
Q3. 다음 중 대칭키 암호 알고리즘이 아닌 것은?
① AES ② ARIA ③ ECC ④ SEED
정답: ③
- ①②④ 틀림: 모두 대칭키 블록 암호다(ARIA·SEED는 국산).
- ③ 맞음: ECC는 타원곡선 기반 공개키 암호다.
Q4. 하이브리드 암호 방식을 사용하는 주된 이유로 가장 적절한 것은?
① 공개키 암호만으로는 무결성을 보장할 수 없어서
② 대칭키의 빠른 속도와 공개키의 안전한 키 분배 장점을 함께 얻기 위해
③ 대칭키 암호가 공개키 암호보다 안전성이 낮아서
④ 전자서명 없이 부인방지를 제공하기 위해
정답: ②
- ① 틀림: 하이브리드의 목적은 속도와 키 분배다. 무결성은 해시/MAC/서명의 역할.
- ② 맞음.
- ③ 틀림: AES는 충분히 안전하다. 안전성이 아니라 키 분배 문제가 약점이다.
- ④ 틀림: 부인방지는 전자서명이 있어야 한다.
Q5. 평문 비트열 1100을 키 1010과 XOR한 암호문은?
① 1110 ② 0110 ③ 1000 ④ 0011
정답: ②
- 자리별로: 1⊕1=0, 1⊕0=1, 0⊕1=1, 0⊕0=0 → 0110.
- ① 틀림: OR 연산 결과다.
- ③ 틀림: AND 연산 결과다.
- ④ 틀림: 단순히 평문을 반전한 값이다.
- 확인: 0110 ⊕ 1010 = 1100 으로 원래 평문이 돌아온다.
Day 5 · 해시 · MAC
1. 해시 함수란 — 데이터의 지문
해시 함수는 아무리 긴 데이터를 넣어도 정해진 길이의 짧은 값을 내놓는 함수다. 이 값을 해시값(메시지 다이제스트, 지문)이라 한다.
사람의 지문처럼, 데이터가 조금만 달라도 지문이 완전히 달라지고, 지문만 보고 그 사람을 "만들어 낼" 수는 없다. 그래서 무결성 확인에 쓴다.
"hello" ─┐
"안녕하세요..."(1MB) ─┼─▶ [SHA-256] ─▶ 항상 256비트(16진수 64자리)
영화 파일(4GB) ─┘
◀── 거꾸로 계산 불가 (일방향)
해시 함수의 기본 성질
| 성질 | 설명 |
|---|---|
| 고정 길이 출력 (압축) | 입력 길이와 무관하게 출력 길이 일정 |
| 계산 용이성 | 해시값 계산은 빠르다 |
| 일방향성 | 해시값으로 입력을 거꾸로 구할 수 없다 |
| 쇄도 효과 | 입력이 조금만 바뀌어도 출력이 완전히 바뀐다 |
2. 실습 · 실제 해시값 보기
아래는 실제 SHA-256 계산 결과다. 글자 하나만 다른데 결과가 완전히 다르다.
SHA-256("hello")
= 2cf24dba5fb0a30e26e83b2ac5b9e29e
1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") ← h를 대문자로
= 185f8db32271fe25f561a6fc938b2e26
4306ec304eda518007d1764826381969
SHA-256("hellp") ← 마지막 o를 p로
= fdd7585e08c4e2afd71dcabdb4636c89
d557a3f42db9e2040c8bbd1708aa4ce7
MD5("hello")
= 5d41402abc4b2a76b9719d911017c592 (128비트 = 16진수 32자리)
- SHA-256 출력은 256비트 = 16진수 64자리(16진수 1자리 = 4비트).
- 직접 확인하고 싶으면 리눅스에서
echo -n hello | sha256sum(-n이 없으면 줄바꿈까지 해시되어 값이 달라진다).
3. 해시의 3가지 안전성 (★ 정확한 정의가 중요)
세 성질은 "공격자가 무엇을 받고, 무엇을 찾아야 하나"로 구분한다.
| 성질 | 공격자에게 주어진 것 | 찾기 어려워야 하는 것 |
|---|---|---|
| 역상 저항성 (Preimage) | 해시값 h | h(x) = h 인 입력 x |
| 두 번째 역상 저항성 (2nd Preimage, 약한 충돌 저항성) | 입력 x (와 그 해시) | h(x') = h(x) 인 다른 x' |
| 충돌 저항성 (Collision, 강한 충돌 저항성) | 아무것도 없음 (자유롭게 고름) | h(x) = h(x') 인 아무 쌍 (x, x') |
역상 저항성: ? ──▶ [H] ──▶ 2cf24... (값만 보고 원문 찾기)
2번째 역상 저항성: "계약서 원본" ──▶ [H] ──▶ 7a1f...
?(다른 문서) ──▶ [H] ──▶ 7a1f... (같은 값 만들기)
충돌 저항성: ?, ? 아무 두 개 ──▶ [H] ──▶ 같은 값이면 성공
- 충돌 저항성이 가장 강한 요구다. 공격자가 두 입력을 다 고를 수 있어 가장 찾기 쉽기 때문이다.
- 생일 역설: 23명만 모여도 생일 같은 쌍이 있을 확률이 50%를 넘는다. 마찬가지로 n비트 해시의 충돌은 약 2^(n/2) 번 시도로 찾을 수 있다. 그래서 128비트 MD5는 충돌 측면에서 사실상 64비트 강도밖에 안 된다.
- 쓰임새 연결: 비밀번호 해시 저장 → 역상 저항성, 서명된 계약서 바꿔치기 방지 → 두 번째 역상 저항성, 서명용 해시 전반 → 충돌 저항성.
4. 해시 알고리즘 종류
| 알고리즘 | 출력 길이 | 상태 |
|---|---|---|
| MD5 | 128비트 | 충돌 공격 실증 → 사용 금지 |
| SHA-1 | 160비트 | 실제 충돌 발견(2017) → 사용 금지 |
| SHA-2 (SHA-224/256/384/512) | 224~512비트 | 현재 표준, 권장 |
| SHA-3 (Keccak) | 224~512비트 | SHA-2와 다른 구조(스펀지), 권장 |
| HAS-160 | 160비트 | 국산 (구형) |
| LSH | 256/512비트 | 국산, 권장 |
5. 해시만으로는 왜 부족한가
해시는 "데이터가 바뀌었는지"만 알려 준다. 그런데 네트워크에서 공격자가 메시지와 해시값을 둘 다 바꿔치기하면?
A가 보냄: "100만원" + H("100만원")
공격자 변조: "900만원" + H("900만원") ← 해시는 누구나 계산 가능
B 검증: H("900만원") 계산 = 첨부값 → "변조 없음"?! ✗
- 해시 함수는 키가 없어서 누구나 계산할 수 있다. 그래서 해시 단독으로는 누가 만들었는지(인증) 를 보장 못 한다.
- 해시가 효과적인 경우: 해시값을 별도의 안전한 경로로 받을 때 (예: 공식 사이트에 공개된 다운로드 파일의 SHA-256 체크섬).
6. MAC (Message Authentication Code) — 키를 넣은 해시
MAC은 비밀키를 아는 사람만 계산할 수 있는 검증값이다. 공격자는 키를 모르니 메시지를 바꿔도 올바른 MAC을 만들지 못한다.
sequenceDiagram
participant A as A (비밀키 K)
participant B as B (비밀키 K)
A->>A: MAC = f(K, 메시지)
A->>B: 메시지 + MAC
B->>B: f(K, 받은 메시지) 직접 계산
B->>B: 받은 MAC과 비교
Note over B: 같으면 → 변조 없음 + K를 아는 A가 보냄- 제공: 무결성 + 메시지 인증(출처 인증)
- 못 하는 것: 부인방지. A와 B가 같은 키를 쓰니, A가 "그거 B가 만들어 놓고 나한테 덮어씌우는 거야"라고 우기면 반박할 수 없다. 제3자(판사)도 누가 만들었는지 구분 불가.
- 기밀성도 없다 — 메시지 자체는 평문으로 간다.
HMAC: 해시 함수에 키를 안전하게 결합하는 표준 방식.
HMAC(K, m) = H( (K ⊕ opad) ‖ H( (K ⊕ ipad) ‖ m ) )
- 해시를 두 번 감싸고(안쪽 ipad, 바깥쪽 opad) 키를 섞는다. 단순히
H(K‖m)처럼 붙이면 길이 확장 공격 등에 약할 수 있어 이 구조를 쓴다. - 쓰는 해시에 따라 HMAC-SHA256 등으로 부른다. TLS, API 요청 서명, JWT(HS256) 등에서 쓰인다.
- 블록 암호로 만드는 MAC도 있다: CBC-MAC, CMAC.
7. 해시 vs MAC vs 전자서명 비교 (★)
| 구분 | 해시 | MAC / HMAC | 전자서명 |
|---|---|---|---|
| 사용하는 키 | 없음 | 대칭(공유) 비밀키 | 송신자 개인키 (검증은 공개키) |
| 무결성 | ✅ (안전한 경로 필요) | ✅ | ✅ |
| 출처 인증 | ❌ | ✅ | ✅ |
| 부인방지 | ❌ | ❌ | ✅ |
| 기밀성 | ❌ | ❌ | ❌ |
| 속도 | 가장 빠름 | 빠름 | 느림 |
8. 해시의 용도 정리
- 무결성 검증: 파일 다운로드 체크섬, 포렌식 증거 해시
- 비밀번호 저장: 평문 대신
솔트 + 느린 해시저장 (Day 2) - 전자서명: 긴 메시지 대신 해시값에 서명 → 빠르고 크기 일정 (Day 6)
- MAC/HMAC 구성 요소
- 블록체인: 블록 연결, 작업증명(PoW) — "해시값이 특정 조건(앞자리 0이 n개 등)을 만족하는 값을 찾는 경쟁". 역상 저항성 때문에 찍어 보는 수밖에 없어 계산 비용이 곧 보안이 된다.
⚠️ 시험 함정
- 두 번째 역상 저항성 vs 충돌 저항성: "주어진 입력 x"가 있으면 두 번째 역상, "임의의 두 입력"이면 충돌 저항성.
- "약한 충돌 저항성 = 두 번째 역상 저항성", "강한 충돌 저항성 = 충돌 저항성".
- 해시는 암호화가 아니다. 복호화가 없다. "해시로 기밀성 제공" 보기는 틀림.
- MAC은 부인방지 불가(대칭키 공유), 전자서명은 가능. 이 차이를 묻는 보기가 매우 자주 나온다.
- MAC도 기밀성은 없다. 무결성 + 인증만.
- MD5·SHA-1은 출력이 짧아서라기보다 충돌이 실제로 발견되어 안전하지 않다.
- 생일 공격의 복잡도는 2ⁿ이 아니라 2^(n/2).
기출 포인트
- 해시 안전성 세 가지의 정의 문장을 주고 이름을 고르게 하는 유형이 대표적이다.
- MAC과 전자서명 비교에서 부인방지 제공 여부를 묻는다.
- 해시 알고리즘별 출력 길이나 안전/취약 여부, 국산 해시(LSH) 식별.
- 생일 공격의 원리와 충돌 탐색 복잡도.
- HMAC의 구성(해시 + 비밀키)과 제공 서비스.
확인 문제
Q1. "주어진 메시지 M에 대해 H(M) = H(M')을 만족하는 다른 메시지 M'을 찾는 것이 계산상 어려워야 한다"는 성질은?
① 역상 저항성 ② 두 번째 역상 저항성 ③ 충돌 저항성 ④ 일방향성
정답: ②
- ① 틀림: 역상 저항성은 해시값만 주어졌을 때 입력을 찾기 어려운 성질이다.
- ② 맞음: 특정 입력 M이 이미 주어져 있고, 같은 해시의 다른 입력을 찾는 것.
- ③ 틀림: 충돌 저항성은 입력을 둘 다 자유롭게 골라 같은 해시를 찾는 것이다.
- ④ 틀림: 일방향성은 역상 저항성과 같은 맥락이다.
Q2. MAC에 대한 설명으로 옳지 않은 것은?
① 송·수신자가 비밀키를 공유한다
② 메시지 무결성을 확인할 수 있다
③ 메시지 출처를 인증할 수 있다
④ 송신자의 부인을 방지할 수 있다
정답: ④
- ①②③ 옳음: MAC은 공유 비밀키로 무결성과 출처 인증을 제공한다.
- ④ 틀림: 수신자도 같은 키로 똑같은 MAC을 만들 수 있으므로, 송신자가 "내가 만든 게 아니다"라고 부인하면 막을 수 없다.
Q3. 출력이 128비트인 해시 함수에서 생일 공격으로 충돌을 찾는 데 필요한 대략적인 시도 횟수는?
① 2^32 ② 2^64 ③ 2^128 ④ 2^256
정답: ②
- 생일 공격 복잡도는 2^(n/2) → 2^(128/2) = 2^64.
- ① 틀림: n/4로 계산한 값.
- ③ 틀림: 역상(특정 값 맞히기) 공격의 복잡도다.
- ④ 틀림: 근거 없는 값.
Q4. 다음 중 해시 함수의 용도로 가장 거리가 먼 것은?
① 다운로드 파일의 무결성 확인 ② 비밀번호 저장 ③ 전자서명 대상 축약 ④ 메시지의 기밀성 보장
정답: ④
- ①②③ 모두 해시의 대표 용도다.
- ④ 틀림: 해시는 되돌릴 수 없어 수신자도 원문을 복원할 수 없다. 기밀성은 암호화의 역할이다.
Q5. 다음 중 현재 안전한 해시 함수로 사용을 권장하기 어려운 것은?
① SHA-256 ② SHA-3 ③ SHA-1 ④ LSH
정답: ③
- ①②④ 틀림: 현재 권장되는 해시 함수다 (LSH는 국산).
- ③ 맞음: SHA-1은 실제 충돌 쌍이 공개되어 전자서명 등에 쓰면 안 된다.
Day 6 · 전자서명 · 인증서 · PKI (그림 그리기)
1. 전자서명이란 — 디지털 인감도장
종이 계약서에 인감도장을 찍으면, 인감증명서와 대조해 "이 사람이 찍은 게 맞다"를 확인할 수 있다. 전자서명은 이걸 디지털로 옮긴 것이다.
- 인감도장 = 개인키 (나만 가짐)
- 인감증명서 = 공개키 (+ 인증서) (누구나 대조 가능)
개인키는 나만 가지고 있으므로, 서명이 맞으면 "내가 만들었다"는 걸 부정할 수 없다 → 부인방지.
2. 전자서명 생성과 검증 — 단계별
메시지 전체를 개인키로 처리하면 느리므로, 해시값에만 서명한다.
sequenceDiagram
participant A as 송신자 A
participant B as 수신자 B
Note over A: [서명 생성]
A->>A: ① h = Hash(메시지)
A->>A: ② 서명 = Sign(A 개인키, h)
A->>B: ③ 메시지 + 서명 전송
Note over B: [서명 검증]
B->>B: ④ h1 = Verify(A 공개키, 서명)
B->>B: ⑤ h2 = Hash(받은 메시지)
B->>B: ⑥ h1 == h2 ?
Note over B: 같으면 위변조 없음 + A가 서명함ASCII로 다시 보면:
[A 쪽: 생성]
메시지 ──▶ Hash ──▶ h ──▶ (A 개인키로 서명) ──▶ 서명
│ │
└──────────────── 함께 전송 ───────────────────┘
│
[B 쪽: 검증] ▼
메시지 ──▶ Hash ──▶ h2 ─────┐
├─ 비교: 같으면 OK
서명 ──▶ (A 공개키로 검증) ─▶ h1 ┘
- ④에서 A의 공개키로 풀린다 = A의 개인키로 만든 것 → 인증·부인방지
- ⑥에서 해시가 같다 = 메시지가 바뀌지 않았다 → 무결성
- 메시지는 평문으로 갔다 → 기밀성은 없음. 필요하면 B의 공개키(또는 세션키)로 따로 암호화.
교과서·시험에서는 "해시값을 개인키로 암호화한다"고 설명하는 경우가 많다. 개념 이해용으로는 맞지만, 정확히는 "개인키로 서명 연산"이다(DSA, ECDSA는 암호화와 다른 수학 구조). 시험에서는 "송신자 개인키로 서명, 송신자 공개키로 검증"만 확실히 하면 된다.
3. 전자서명이 갖춰야 할 조건
| 조건 | 의미 |
|---|---|
| 위조 불가 | 서명자(개인키 소유자)만 만들 수 있다 |
| 서명자 인증 | 누가 서명했는지 누구나 확인 가능 |
| 부인 방지 | 서명자가 나중에 서명 사실을 부인할 수 없다 |
| 변경 불가 | 서명된 문서 내용을 바꿀 수 없다 (바꾸면 검증 실패) |
| 재사용 불가 | 한 문서의 서명을 다른 문서에 옮겨 쓸 수 없다 |
4. 이번 주 목표 그림: 기밀성 + 서명 동시에
A가 "B만 읽고 + A가 보낸 게 확실한" 메시지를 보내려면 둘을 합친다.
flowchart TD
M["메시지"] --> H["해시"]
H --> S["A 개인키로 서명"]
M --> P["메시지 + 서명"]
S --> P
K["랜덤 세션키 생성"] --> E1["세션키로 메시지+서명 암호화(AES)"]
P --> E1
K --> E2["세션키를 B 공개키로 암호화"]
E1 --> T["B에게 전송"]
E2 --> TB 쪽에서는 거꾸로:
- B 개인키로 세션키 복호화
- 세션키로 메시지 + 서명 복호화 (기밀성)
- A 공개키로 서명 검증 + 해시 비교 (무결성·인증·부인방지)
그런데 3번에서 쓴 "A 공개키"가 진짜 A의 것인지 어떻게 아나? 공격자가 자기 공개키를 "A 공개키"라고 속여 뿌렸다면? → 인증서와 PKI가 필요한 이유.
5. 인증서 (X.509) — 공개키의 신분증
인증서는 "이 공개키는 A의 것이 맞다" 는 내용을 믿을 수 있는 제3자(CA)가 전자서명으로 보증한 전자 문서다. 주민등록증에 정부 직인이 찍혀 있는 것과 같다.
X.509 v3 인증서 주요 필드
| 필드 | 내용 | 비유 |
|---|---|---|
| 버전 (Version) | v1/v2/v3 (현재 대부분 v3) | 양식 번호 |
| 일련번호 (Serial Number) | CA가 붙인 고유 번호 (폐지 목록에서 이 번호로 식별) | 신분증 번호 |
| 서명 알고리즘 | CA가 서명에 쓴 알고리즘 (예: sha256WithRSAEncryption) | 직인 종류 |
| 발급자 (Issuer) | 발급한 CA 이름 | 발급 기관 |
| 유효기간 (Validity) | 시작일(notBefore) ~ 만료일(notAfter) | 유효기간 |
| 주체 (Subject) | 인증서 주인 이름 | 이름 |
| 주체 공개키 정보 | 주인의 공개키와 알고리즘 | 사진 |
| 고유 식별자 (v2) | 발급자/주체 고유 ID (거의 안 씀) | |
| 확장 (Extensions, v3) | 키 용도, 기본 제약(CA 여부), 주체 대체 이름(SAN, 도메인 목록), CRL 배포 지점, 기관 정보 접근(AIA, OCSP 주소) 등 | 비고란 |
| CA의 서명 | 위 내용 전체에 대한 CA의 전자서명 | 정부 직인 |
인증서에는 개인키가 들어 있지 않다. "인증서에 사용자 개인키가 포함된다"는 보기는 틀림. 인증서는 공개 문서다.
6. PKI (공개키 기반구조) 구성
PKI는 인증서를 발급·배포·확인·폐지하는 전체 체계다.
| 구성 요소 | 역할 | 비유 |
|---|---|---|
| CA (인증기관) | 인증서 발급·갱신·폐지, CRL 발행, 서명 | 주민센터(발급) |
| RA (등록기관) | 신청자 신원 확인 후 CA에 발급 요청 (CA 업무 대행) | 신분 확인 창구 |
| 디렉터리 / 저장소 | 인증서와 CRL을 보관·공개 (주로 LDAP) | 공개 조회 게시판 |
| VA (검증기관) | 인증서 유효성(폐지 여부) 확인 서비스, OCSP 응답 | 진위 확인 콜센터 |
| 사용자 (End Entity) | 인증서 신청·사용, 검증하는 쪽 | 시민 |
sequenceDiagram
participant U as 사용자
participant RA as RA(등록기관)
participant CA as CA(인증기관)
participant D as 디렉터리
U->>RA: ① 신분 확인 + 인증서 신청(공개키 제출)
RA->>CA: ② 확인 완료, 발급 요청
CA->>CA: ③ 공개키+신원 정보에 CA 개인키로 서명
CA->>U: ④ 인증서 발급
CA->>D: ⑤ 인증서·CRL 게시- 사용자는 키 쌍을 직접 생성하고 공개키만 제출하는 것이 원칙이다. 개인키는 사용자 밖으로 나가지 않는다.
7. 인증서 체인 — 믿음의 사슬
CA도 수가 많으니, "CA를 보증하는 CA"가 있다. 맨 위 루트 CA는 자기가 자기를 서명(자체 서명)하며, 그 인증서는 브라우저·OS에 미리 내장되어 있다.
┌──────────────────────────────┐
│ 루트 CA 인증서 (자체 서명) │ ← OS/브라우저에 미리 탑재 = 신뢰의 출발점
│ 발급자 = 주체 = Root CA │
└──────────────┬───────────────┘
│ 루트 CA 개인키로 서명
┌──────────────▼───────────────┐
│ 중간 CA 인증서 │
│ 발급자: Root CA / 주체: 중간 CA│
└──────────────┬───────────────┘
│ 중간 CA 개인키로 서명
┌──────────────▼───────────────┐
│ 서버(최종 개체) 인증서 │
│ 발급자: 중간 CA / 주체: shop.com│
└──────────────────────────────┘
검증 순서 (브라우저가 shop.com 인증서를 받으면):
- 서버 인증서의 서명을 중간 CA 공개키로 검증
- 중간 CA 인증서의 서명을 루트 CA 공개키로 검증
- 루트 CA가 내 신뢰 저장소에 있는지 확인
- 각 인증서의 유효기간, 폐지 여부(CRL/OCSP), 도메인 이름 일치 확인
- 모두 통과하면 자물쇠 표시 🔒
2020년 12월 개정 전자서명법 시행으로 "공인인증서"의 법적 우월 지위가 없어지고, 다양한 민간 전자서명(인증서)이 경쟁하는 체계가 되었다. 기존 공인인증서는 "공동인증서"로 이름이 바뀌어 쓰인다. 전자서명법은 2027~2029 출제기준에 명시된 법이므로 Week06_정보보안 관리 및 법규에서 다시 다룬다.
8. 인증서 폐지 확인 — CRL vs OCSP
유효기간이 남았어도 개인키 유출, 소속 변경, 정보 오류 등이 생기면 CA가 인증서를 폐지한다. 문제는 "폐지됐는지 어떻게 알리나"다.
| 구분 | CRL (인증서 폐지 목록) | OCSP (온라인 인증서 상태 프로토콜) |
|---|---|---|
| 방식 | CA가 폐지된 인증서 일련번호 목록을 서명해 주기적으로 게시 | 클라이언트가 인증서 하나의 상태를 실시간 질의 |
| 비유 | 분실 신분증 명단을 매주 게시판에 붙임 | 전화로 "이 번호 유효해요?" 물어봄 |
| 실시간성 | ❌ 발행 주기 사이의 시차 존재 | ✅ 실시간 |
| 부담 | 목록이 커지면 다운로드 부담 | 요청마다 서버 질의 → 서버 부하, 조회 사실 노출(프라이버시) |
| 응답 | 목록 전체 | good / revoked / unknown |
| 보완 | Delta CRL (변경분만) | OCSP Stapling (서버가 OCSP 응답을 미리 받아 함께 제공) |
⚠️ 시험 함정
- 전자서명 생성 = 송신자 개인키, 검증 = 송신자 공개키. 수신자 키가 등장하면 의심.
- 전자서명은 기밀성을 제공하지 않는다.
- 서명 대상은 보통 메시지 전체가 아니라 해시값. 이유: 속도와 크기.
- 인증서를 서명하는 것은 CA의 개인키, 인증서 안에 들어 있는 것은 주체(사용자)의 공개키.
- 신원 확인 = RA, 발급·폐지 = CA. 둘을 바꾼 보기 주의.
- 루트 CA 인증서는 자체 서명(발급자 = 주체).
- CRL은 주기적·목록 방식, OCSP는 실시간·개별 질의. "CRL이 실시간" → 틀림.
- CRL에는 인증서 전체가 아니라 일련번호와 폐지 일시·사유가 들어 있다.
기출 포인트
- 전자서명 과정에서 각 단계에 사용되는 키를 묻는 문제가 가장 흔하다.
- 전자서명이 제공하는 보안 서비스 중 제공하지 않는 것(기밀성) 고르기.
- X.509 인증서 필드에 포함되지 않는 것(예: 개인키) 고르기, 확장 필드 이해.
- PKI 구성 요소의 역할 매칭 (CA, RA, 디렉터리, VA).
- CRL과 OCSP의 차이, OCSP Stapling의 목적.
확인 문제
Q1. 전자서명 검증 시 수신자가 사용하는 키는?
① 수신자의 개인키 ② 수신자의 공개키 ③ 송신자의 개인키 ④ 송신자의 공개키
정답: ④
- ①② 틀림: 수신자 키는 기밀성(복호화) 에 쓰인다. 서명 검증과 무관.
- ③ 틀림: 송신자 개인키는 서명 생성에 쓰이며 수신자는 가질 수 없다.
- ④ 맞음: 송신자 공개키로 서명을 검증한다.
Q2. X.509 인증서에 포함되지 않는 정보는?
① 발급자 이름 ② 유효기간 ③ 주체의 공개키 ④ 주체의 개인키
정답: ④
- ①②③ 틀림: 모두 X.509 기본 필드다.
- ④ 맞음: 개인키는 주인만 보관하며 공개 문서인 인증서에 절대 넣지 않는다.
Q3. PKI에서 인증서 신청자의 신원을 확인하고 CA에 발급을 요청하는 역할을 하는 것은?
① RA ② VA ③ 디렉터리 ④ 루트 CA
정답: ①
- ① 맞음: 등록기관(RA)이 신원 확인을 대행한다.
- ② 틀림: VA는 인증서 유효성 검증(폐지 여부 응답)을 한다.
- ③ 틀림: 디렉터리는 인증서·CRL을 저장·공개한다.
- ④ 틀림: 루트 CA는 최상위 신뢰점으로 하위 CA 인증서를 발급한다. 개인 신원 확인 창구가 아니다.
Q4. CRL과 비교한 OCSP의 특징으로 옳은 것은?
① 폐지 목록 전체를 주기적으로 내려받는다
② 인증서의 폐지 여부를 실시간으로 조회한다
③ 인증서 발급 기능을 수행한다
④ 응답 서버에 부하가 전혀 발생하지 않는다
정답: ②
- ① 틀림: CRL 방식의 설명이다.
- ② 맞음.
- ③ 틀림: 발급은 CA의 역할이다.
- ④ 틀림: 요청마다 응답해야 하므로 서버 부하가 생긴다. 그래서 OCSP Stapling 같은 보완책이 나왔다.
Q5. 전자서명이 제공하는 보안 서비스가 아닌 것은?
① 무결성 ② 기밀성 ③ 부인방지 ④ 송신자 인증
정답: ②
- ①③④ 틀림: 모두 전자서명이 제공한다(해시 비교 → 무결성, 개인키 → 인증·부인방지).
- ② 맞음: 메시지는 평문으로 전송되며, 서명은 송신자 공개키로 누구나 검증할 수 있다. 기밀성은 별도 암호화가 필요하다.
Day 7 · 주간 정리
할 일
주간 요약 (아웃라인)
1. 보안 기본 개념 (Day 1)
- CIA: 기밀성(가로채기↔암호화) · 무결성(변조↔해시/MAC/서명) · 가용성(차단↔이중화/백업)
- 추가: 인증성(진짜인가), 책임추적성(누가 했나, 고유 계정+로그), 부인방지(전자서명)
- 위협 4유형: 차단-가용성, 가로채기-기밀성, 변조-무결성, 위조-인증
- 소극적(도청, 트래픽 분석: 탐지 어려움 → 예방) vs 적극적(변조, 위조, 차단, 재전송)
- 원칙: 최소 권한, 직무 분리, Need-to-know, 심층 방어, Fail-safe 기본 거부, 완전한 중재, 개방 설계
- 흐름: 식별(주장) → 인증(검증) → 인가(권한) → 책임추적(기록)
2. 인증 (Day 2)
- 지식 / 소유 / 존재(생체) (+ 행위, 위치). 다른 유형 2개 이상 = 다중요소
- FRR(1종, 본인 거부, 불편) / FAR(2종, 타인 수락, 위험) / CER = 교차점, 낮을수록 정확
- OTP: 시간 동기(TOTP) / 이벤트 동기(HOTP) / 질의-응답(비동기) / S/KEY(해시 체인, 역순 사용)
- 패스워드 공격: 무차별, 사전, 레인보우 테이블(솔트로 대응), 크리덴셜 스터핑, 스프레이
3. 암호 기초 (Day 3)
- 치환(카이사르·비즈네르) vs 전치(스키테일·레일펜스)
- 혼돈 = 키-암호문 관계 숨김 = 치환 / 확산 = 평문 변화 퍼뜨림 = 전치
- 케르크호프스: 키만 비밀
- 공격: COA < KPA < CPA < CCA (공격자 정보량 순)
4. 대칭 vs 공개키 (Day 4)
- XOR: 같은 키로 두 번 하면 원래대로
- 블록(AES, SEED, ARIA, LEA) vs 스트림(RC4, ChaCha20)
- 대칭: 빠름, 키 분배 문제, n(n-1)/2 / 공개키: 느림, 진위 확인 문제(PKI), 2n
- 하이브리드: 공개키로 세션키 전달, 데이터는 대칭키
- 기밀성 = 수신자 공개키, 서명 = 송신자 개인키
5. 해시 · MAC (Day 5)
- 고정 길이, 일방향, 쇄도 효과
- 역상(값→입력) / 두 번째 역상(주어진 x → 다른 x') / 충돌(아무 두 입력)
- 생일 공격 2^(n/2). MD5·SHA-1 사용 금지, SHA-2·SHA-3·LSH 권장
- MAC/HMAC: 무결성 + 인증, 부인방지 X
6. 전자서명 · PKI (Day 6)
- 해시 → 송신자 개인키 서명 → 송신자 공개키 검증 → 해시 비교
- 제공: 무결성·인증·부인방지 / 기밀성 X
- X.509: 버전, 일련번호, 서명 알고리즘, 발급자, 유효기간, 주체, 주체 공개키, 확장, CA 서명 (개인키 X)
- PKI: CA(발급·폐지), RA(신원 확인), 디렉터리(저장·공개), VA(유효성 확인)
- 체인: 루트(자체 서명, 내장) → 중간 CA → 서버
- CRL(주기적 목록) vs OCSP(실시간 질의), OCSP Stapling
미니 퀴즈 (15문항)
Q1. 해커가 웹 서버에 대량의 요청을 보내 정상 사용자가 접속하지 못하게 했다. 직접적으로 침해된 보안 요소는?
① 기밀성 ② 무결성 ③ 가용성 ④ 부인방지
정답: ③
- ① 틀림: 정보가 노출되지 않았다.
- ② 틀림: 데이터가 변경되지 않았다.
- ③ 맞음: 필요할 때 쓸 수 없게 됨 = 가용성 침해(DoS/DDoS).
- ④ 틀림: 행위 부인과 무관하다.
Q2. 다음 중 적극적 공격이 아닌 것은?
① 메시지 변조 ② 재전송 ③ 위장(위조) ④ 도청
정답: ④
- ①②③ 틀림: 모두 데이터나 통신에 개입하는 적극적 공격이다.
- ④ 맞음: 도청은 엿듣기만 하는 소극적 공격이다.
Q3. "명시적으로 허용되지 않은 접근은 모두 거부한다"는 원칙은?
① 심층 방어 ② Fail-safe 기본값 ③ 직무 순환 ④ 개방 설계
정답: ②
- ① 틀림: 여러 겹의 방어를 두는 원칙이다.
- ② 맞음: 기본값을 안전한 쪽(거부)으로 두는 원칙이다.
- ③ 틀림: 담당자를 주기적으로 바꾸는 관리 원칙이다.
- ④ 틀림: 설계 비밀에 의존하지 않는 원칙이다.
Q4. 다음 중 서로 다른 인증 유형의 조합이 아닌 것은?
① 보안카드 + 비밀번호 ② 지문 + OTP 토큰 ③ 서명 패턴 + 키 입력(타자) 리듬 ④ 홍채 + PIN
정답: ③
- ① 틀림: 소유 + 지식.
- ② 틀림: 존재 + 소유.
- ③ 맞음: 서명 패턴과 타자 리듬은 모두 행위 특성이라 같은 유형이다.
- ④ 틀림: 존재 + 지식.
Q5. 생체인증 시스템 A의 CER은 2%, B의 CER은 5%이다. 옳은 설명은?
① B가 더 정확하다 ② A가 더 정확하다 ③ A의 FAR은 항상 0%이다 ④ CER로는 비교할 수 없다
정답: ②
- ① 틀림: CER은 낮을수록 정확하다.
- ② 맞음.
- ③ 틀림: CER 지점에서 FAR = FRR = 2%이다. 0%가 아니다.
- ④ 틀림: CER은 바로 시스템 정확도를 비교하는 지표다.
Q6. 혼돈(Confusion)에 대한 설명으로 옳은 것은?
① 평문 1비트 변화가 암호문 전체에 퍼지게 한다
② 키와 암호문 사이의 관계를 복잡하게 만든다
③ 주로 전치(순열)로 구현한다
④ 알고리즘을 비공개로 하는 원칙이다
정답: ②
- ① 틀림: 확산의 설명이다.
- ② 맞음.
- ③ 틀림: 혼돈은 치환(S-Box)으로, 확산이 전치로 구현된다.
- ④ 틀림: 혼돈과 무관하며, 오히려 케르크호프스 원칙에 반하는 설명이다.
Q7. 공격자가 가진 정보가 가장 많은(공격자에게 가장 유리한) 공격 모델은?
① 암호문 단독 공격 ② 기지 평문 공격 ③ 선택 평문 공격 ④ 선택 암호문 공격
정답: ④
- COA < KPA < CPA < CCA 순서로 공격자 정보가 많아진다.
- ①②③ 틀림: 모두 선택 암호문 공격보다 정보가 적다.
- ④ 맞음: 원하는 암호문을 복호화해 볼 수까지 있다.
Q8. 50명이 대칭키로 서로 1:1 통신할 때 필요한 키 개수는?
① 100 ② 1,225 ③ 2,450 ④ 2,500
정답: ②
- 50×49/2 = 1,225.
- ① 틀림: 공개키 방식(2n)의 키 개수다.
- ③ 틀림: 2로 나누지 않았다.
- ④ 틀림: n²으로 계산했다.
Q9. 공개키 암호에 대한 설명으로 옳지 않은 것은?
① 대칭키 암호보다 처리 속도가 느리다
② 키 분배 문제를 해결하는 데 활용된다
③ 공개키로부터 개인키를 쉽게 계산할 수 있다
④ 전자서명에 활용된다
정답: ③
- ①②④ 옳음: 공개키 암호의 기본 특징이다.
- ③ 틀림: 공개키에서 개인키를 계산하는 것이 어렵다는 것(소인수분해, 이산대수 등)이 안전성의 근거다.
Q10. Diffie-Hellman 알고리즘의 주된 용도는?
① 대용량 데이터 암호화 ② 키 교환(합의) ③ 해시값 생성 ④ 인증서 폐지 확인
정답: ②
- ① 틀림: 대용량 데이터는 대칭키 암호로 처리한다.
- ② 맞음: 공개 채널에서 공통 비밀키를 합의하는 알고리즘이다.
- ③ 틀림: 해시 함수의 역할이다.
- ④ 틀림: CRL/OCSP의 역할이다.
Q11. "공격자가 아무 두 입력을 자유롭게 골라서 같은 해시값이 나오게 하는 것이 어려워야 한다"는 성질은?
① 역상 저항성 ② 두 번째 역상 저항성 ③ 충돌 저항성 ④ 쇄도 효과
정답: ③
- ① 틀림: 해시값만 주어졌을 때 입력 찾기다.
- ② 틀림: 입력 하나가 고정되어 있을 때의 성질이다.
- ③ 맞음: 두 입력을 모두 자유롭게 고르는 경우 = 충돌 저항성(강한 충돌 저항성).
- ④ 틀림: 입력의 작은 변화가 출력을 크게 바꾸는 성질로, 저항성 정의가 아니다.
Q12. HMAC이 제공하는 보안 서비스로 옳은 것만 고른 것은?
① 기밀성, 무결성 ② 무결성, 메시지 인증 ③ 메시지 인증, 부인방지 ④ 기밀성, 부인방지
정답: ②
- ① 틀림: HMAC은 메시지를 암호화하지 않아 기밀성이 없다.
- ② 맞음.
- ③ 틀림: 공유 비밀키라 부인방지 불가.
- ④ 틀림: 둘 다 제공하지 않는다.
Q13. 인증서를 발급할 때 CA가 인증서에 서명하는 데 사용하는 키는?
① 사용자의 개인키 ② 사용자의 공개키 ③ CA의 개인키 ④ CA의 공개키
정답: ③
- ① 틀림: 사용자 개인키는 사용자만 가지며 CA에 제출하지 않는다.
- ② 틀림: 사용자 공개키는 인증서 안에 담기는 내용이다.
- ③ 맞음: CA가 자기 개인키로 서명 → 누구나 CA 공개키로 검증.
- ④ 틀림: CA 공개키는 서명 검증에 쓴다.
Q14. 인증서 체인 검증에 대한 설명으로 옳지 않은 것은?
① 루트 CA 인증서는 자체 서명되어 있다
② 서버 인증서의 서명은 발급한 중간 CA의 공개키로 검증한다
③ 루트 CA 인증서는 브라우저·OS의 신뢰 저장소에 미리 들어 있다
④ 서버 인증서가 유효하면 상위 CA 인증서는 확인하지 않아도 된다
정답: ④
- ①②③ 옳음: 체인의 기본 구조다.
- ④ 틀림: 서버 인증서를 믿으려면 그것에 서명한 중간 CA, 다시 그 위의 루트 CA까지 사슬 전체가 검증되어야 한다.
Q15. 다음 중 CRL의 단점으로 가장 적절한 것은?
① 인증서 발급이 불가능하다
② 발행 주기 사이에 폐지된 인증서를 즉시 반영하지 못한다
③ 인증서 하나마다 실시간 질의가 필요하다
④ CA의 서명이 없어 위조가 쉽다
정답: ②
- ① 틀림: CRL은 폐지 목록이지 발급 기능과 무관하다.
- ② 맞음: 주기적 발행이라 시차가 생긴다. 이를 보완한 것이 OCSP.
- ③ 틀림: OCSP의 특징이다.
- ④ 틀림: CRL도 CA가 서명해서 발행한다.